package de.htw.ejb.manager;

import de.htw.ejb.manager.exceptions.EntityManagementDienstException;
import de.htw.ejb.model.Pizza;

import java.util.List;

import javax.ejb.Remote;

import de.htw.ejb.model.Artikel;
import de.htw.ejb.model.Bestellung;
import de.htw.ejb.model.Kunde;

/**
 * Oeffentliche Schnittstelle der EntityManagementDienstBean.
 * 
 * @author Matthias Neef, Thomas Schoenfeld
 * 
 * @version 20130320-01
 */
@Remote
public interface EntityManagementDienstRemote
{
	/**
	 * Speichert das uebergebene Objekt in der Datenbank.
	 * 
	 * @param object
	 *          das zu speichernde Objekt
	 * 
	 * @throws EntityManagementDienstException
	 *           falls die Speicherung fehlschlaegt
	 */
	public void speichern( Object object ) throws EntityManagementDienstException;
	
	/**
	 * Sucht einen Artikel auf Basis seiner Bezeichnung.
	 * 
	 * @param bezeichnung
	 *          die Artikelbezeichnung
	 * 
	 * @return Liste der gefundenen Artikel
	 * 
	 * @throws EntityManagementDienstException
	 *           falls der Artikel nicht gefunden wurde
	 */
	public List<Artikel> sucheArtikelPerBezeichnung( String bezeichnung )
			throws EntityManagementDienstException;
	
	/**
	 * Sucht einen Artikel auf Basis seiner Artikelnummer.
	 * 
	 * @param artikelnummer
	 *          die Artikelnummer
	 * 
	 * @return Liste der gefundenen Artikel
	 * 
	 * @throws EntityManagementDienstException
	 *           falls der Artikel nicht gefunden wurde
	 */
	public List<Artikel> sucheArtikelPerArtikelnummer( int artikelnummer )
			throws EntityManagementDienstException;
	
	/**
	 * Sucht eine Bestellung auf Basis ihrer Bestellnummer.
	 * 
	 * @param bestellnummer
	 *          die Bestellnummer
	 * 
	 * @return Liste der gefundenen Bestellungen
	 * 
	 * @throws EntityManagementDienstException
	 *           falls die Bestellung nicht gefunden wurde
	 */
	public List<Bestellung> sucheBestellungPerBestellnummer( int bestellnummer )
			throws EntityManagementDienstException;
	
	/**
	 * Sucht einen Kunden auf Basis seines Nachnamens.
	 * 
	 * @param name
	 *          der Kundennachname
	 * 
	 * @return Liste der gefundenen Kunden
	 * 
	 * @throws EntityManagementDienstException
	 *           falls der Kunde nicht gefunden wurde
	 */
	public List<Kunde> sucheKundePerName( String name )
			throws EntityManagementDienstException;
	
	/**
	 * Sucht einen Kunden auf Basis seiner Kundennummer.
	 * 
	 * @param kundennummer
	 *          die Kundennummer
	 * 
	 * @return Liste der gefundenen Kunden
	 * 
	 * @throws EntityManagementDienstException
	 *           falls der Kunde nicht gefunden wurde
	 */
	public List<Kunde> sucheKundePerKundennummer( int kundennummer )
			throws EntityManagementDienstException;
	
	/**
	 * Sucht eine Pizza auf Basis ihrer Bezeichnung.
	 * 
	 * @param bezeichnung
	 *          die Artikelbezeichnung der Pizza
	 * 
	 * @return Liste der gefundenen Pizzen
	 * 
	 * @throws EntityManagementDienstException
	 *           falls die Pizza nicht gefunden wurde
	 */
	public List<Pizza> suchePizzaPerBezeichnung( String bezeichnung )
			throws EntityManagementDienstException;
	
	/**
	 * Sucht eine Pizza auf Basis ihrer Artikelnummer.
	 * 
	 * @param artikelnummer
	 *          die Artikelnummer der Pizza
	 * 
	 * @return Liste der gefundenen Pizzen
	 * 
	 * @throws EntityManagementDienstException
	 *           falls die Pizza nicht gefunden wurde
	 */
	public List<Pizza> suchePizzaPerArtikelnummer( int artikelnummer )
			throws EntityManagementDienstException;
	
	/**
	 * Loescht einen Artikel aus der Datenbank.
	 * 
	 * @param artikelnummer
	 *          die Artikelnummer
	 * 
	 * @throws EntityManagementDienstException
	 *           falls der Loeschvorgang fehlschlaegt
	 */
	public void loescheArtikel( int artikelnummer )
			throws EntityManagementDienstException;
	
	/**
	 * Loescht eine Bestellung aus der Datenbank.
	 * 
	 * @param bestellnummer
	 *          die Bestellnummer
	 * 
	 * @throws EntityManagementDienstException
	 *           falls der Loeschvorgang fehlschlaegt
	 */
	public void loescheBestellung( int bestellnummer )
			throws EntityManagementDienstException;
	
	/**
	 * Loescht einen Kunden aus der Datenbank.
	 * 
	 * @param kundennummer
	 *          die Kundennummer
	 * 
	 * @throws EntityManagementDienstException
	 *           falls der Loeschvorgang fehlschlaegt
	 */
	public void loescheKunde( int kundennummer )
			throws EntityManagementDienstException;
	
	/**
	 * Loescht eine Pizza aus der Datenbank.
	 * 
	 * @param artikelnummer
	 *          die Artikelnummer der Pizza
	 * 
	 * @throws EntityManagementDienstException
	 *           falls der Loeschvorgang fehlschlaegt
	 */
	public void loeschePizza( int artikelnummer )
			throws EntityManagementDienstException;
}
